//#pragma once
//
//#include<iostream>
//using namespace std;
//
//namespace ZH
//{
//	template <class T>
//	struct list_node
//	{
//		list_node<T>* prev;
//		list_node<T>* next;
//		T val;
//
//		list_node(const T& t)
//			:prev(nullptr)
//			, next(nullptr)
//			, val(t)
//		{}
//	};
//
//	template <class T>
//	class list
//	{
//	public:
//		typedef list_node<T> node;
//
//		void push_back(const T& t)
//		{
//			if (_node == nullptr)
//			{
//				_node = new node(t);
//				return;
//			}
//
//			node* newnode = new node(t);
//			node* cur = _node->next;
//
//			_node->next = newnode;
//			newnode->prev = _node;
//			newnode->next = cur;
//			cur->prev = newnode;
//		}
//
//		void Print()
//		{
//			node* cur = _node->next;
//			while (cur != _node)
//			{
//				cout << cur->val << " ";
//				cur = cur->next;
//			}
//		}
//
//		~list()
//		{
//			node* cur = _node->next;
//			node* dest = cur->next;
//			while (cur != _node)
//			{
//				delete cur;
//				cur = dest;
//				dest = dest->next;
//			}
//			delete _node;
//			_node = nullptr;
//		}
//
//	private:
//		node* _node = nullptr;
//
//	};
//
//	void test1()
//	{
//
//	}
//}
//
//
